/**
 * 备忘录模式：在不破坏封装性的前提下，捕获一个对象的内部状态，并允许在对象之外保存和恢复这些状态。
 * 
 * 示例需求：
 * 备忘录模式使用三个类 Memento、Originator 和 CareTaker。
 * Memento 包含了要被恢复的对象的状态。
 * Originator 创建Memento，并在 Memento 对象中存储状态。
 * Caretaker 对象负责保存备忘录对象。
 * 
 * 角色：
 * 发起者：Originator 创建备忘录，将自身状态保存到备忘录中
 * 备忘录：Memento
 * 负责人：CareTaker 存放备忘录
 */
public class SimpleMain {
    public static void main(String[] args) {
        // 创建负责人，存储备忘录对象
        CareTaker careTaker = new CareTaker();
        // 创建发起者
        Originator originator = new Originator();

        originator.setState("#1");
        originator.setState("#2");
        // 保存当前状态【#2】到备忘录对象里
        careTaker.addMemento(originator.saveStateToMemento());
        originator.setState("#3");
        // 保存当前状态【#3】到备忘录对象里
        careTaker.addMemento(originator.saveStateToMemento());

        originator.setState("#4");

        System.out.println("state: " + originator.getState());

        System.out.println("--------------------------------");

        // 从负责人获取保存的状态，并使发起者恢复到获取的状态:#2
        originator.getStateFrMemento(careTaker.gMemento(0));
        System.out.println("state: " + originator.getState());

        System.out.println("--------------------------------");

        //恢复状态：#3
        originator.getStateFrMemento(careTaker.gMemento(1));
        System.out.println("state: " + originator.getState());

    }
}
